/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.model;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.List;
import sisgraf.controler.MaterialControler;
import sisgraf.dao.MaterialDaoImp;
import sisgraf.dao.UnidadeDaoImp;
import sisgraf.model.Material;

/**
 *
 * @author POSITIVO R41
 */
public class Estoque {

    public Estoque() {
    }
    public void leEstoque(){
        MaterialDaoImp materialDaoImp =new MaterialDaoImp();
        List<Material> lista=null;
        List<Unidade> listaUnid=null;
        Material material = null;
        String tipo="";
        FileInputStream stream = null;
        Unidade unidade = new Unidade();
        UnidadeDaoImp unidadeDaoImp = new UnidadeDaoImp();
        Integer largura, comprimento, rendimento;
        try {
            stream = new FileInputStream("estoque.txt");
        } catch (FileNotFoundException ex) {
            return;
        }
        InputStreamReader streamReader = new InputStreamReader(stream);
        BufferedReader reader = new BufferedReader(streamReader);
        String line = null;
        int tam=0;
        int cont=0,ini_aux=-1,fim=-1,ini=-1;
        String campos[]=new String[8];
        boolean aspas=false;
        try {
            while ((line = reader.readLine()) != null) {
                for (int i=0;i<line.length();i++){

                    if (i==0 && line.substring(i, i+1).equals("\"")){
                        aspas=true;
                        ini=1;
                    } else if (i==0){
                        ini=0;
                    } else if (i==line.length()-1 && aspas && line.substring(i, i+1).equals("\"")){
                        fim=i-1;
                    } else if (i==line.length()-1){
                        fim=i;
                    } else if (aspas){
                        if (i>line.length()-4){
                            if (line.substring(line.length()-1,line.length()).equals("\"")) fim=line.length()-1;
                            else fim=line.length();
                        }else
                        if (line.substring(i, i+3).equals("\",\"")){
                            fim=i-1;
                            ini_aux=i+3;
                        } else if (line.substring(i, i+2).equals("\",")){
                            aspas = false;
                            fim=i-1;
                            ini_aux=i+2;
                        }
                    } else {
                        if (line.substring(i, i+2).equals(",\"") && !line.substring(i-1, i).equals("\"")){
                            aspas=true;
                            fim=i-1;
                            ini_aux=i+2;
                        } else{
                            if (line.substring(i, i+1).equals(",") && !line.substring(i-1, i).equals("\"")){
                                fim=i-1;
                                ini_aux=i+1;
                            }
                        }
                    }
                    if (ini != -1 && fim != -1){
                        if (cont<8){
                            campos[cont]= line.substring(ini, fim+1);
                            cont++;
                        }
                        ini=-1;
                        fim=-1;
                        if (ini_aux!=-1) ini=ini_aux;
                        ini_aux=-1;
                    }
                }
                // le unidade
                listaUnid = new UnidadeDaoImp().list("u.descricao = '"+campos[2]+"'");
                if (listaUnid.size()>0){
                    unidade=listaUnid.get(0);
                } else {
                    unidade=new Unidade();
                    unidade.setDescricao(campos[2]);
                    if (!new UnidadeDaoImp().save(unidade)) return;
                }
                // le material
                lista = new MaterialDaoImp().list("m.codigo = "+campos[0]);
                if (lista.size()>0) material = lista.get(0);
                else material = new Material();
                if (campos[1].equals("2")) tipo="aplicacao";
                else if (campos[1].equals("1"))tipo="plano";
                else tipo="outros";
                material.setTipo(tipo);
                material.setUnidade(unidade);
                material.setDescricao(campos[3]);
                material.setCusto(new BigDecimal(campos[4]));
                largura = Integer.parseInt(campos[5]);
                material.setLargura(largura);
                comprimento = Integer.parseInt(campos[6]);
                material.setComprimento(comprimento);
                rendimento = Integer.parseInt(campos[7]);
                material.setRendimento(rendimento);
                if (lista.size()>0) if (!new MaterialDaoImp().update(material)) return;
                else if (!new MaterialDaoImp().save(material)) return;
            }
        } catch (IOException ex) {
            return;
        }

    }
}
